package com.sumainfor.common.utlis;

import com.sumainfor.common.util.FieldCheckUtil;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 功能描述:
 * List<Map<String,Object>
 * @Auther: zhlu
 * @Date: 2019/1/18 17:35
 * @Description:
 */
public class ListMapMergeUtil {

    /**
     * 功能描述: 
     * 传递二个List<Map<String,Object>>集合A、B,根据一个字段，把B集合某一个值合并到A中
     * listA:合并之后返回的集合
     * listB:合并的集合
     * itemA:A集合和B集合比较的字段
     * itemB:B集合和A集合比较的字段
     * getVal:B集合中需要取的字段
     * NewVal:A集合中创建成立的新字段
     * @Author zhlu
     * @Description //TODO
     * @Date 2019/1/18 19:33
     */
    public static List<Map<String,Object>> ListTranStringUtils(List<Map<String, Object>> listA,List<Map<String, Object>> listB,String itemA,String itemB,String getVal,String NewVal){
        for(Map<String,Object> mapA:listA){
            String strA=mapA.get(itemA).toString();
            for(Map<String,Object> mapB:listB){
                String strB=mapB.get(itemB).toString();
                if(strA==strB||strA.equals(strB)){
                    mapA.put(NewVal,mapB.get(getVal));
                    mapA.put("ManId",mapB.get("ManId"));
                    mapA.put("MiManName",mapB.get("MiManName"));
                    mapA.put("BeId",mapB.get("BeId"));
                    mapA.put("BeName",mapB.get("BeName"));
                }
            }
            listA.add(mapA);
        }
        return listA;
    }

    /**
     * 功能描述:
     * 传递一个mapA和一个listB集合，根据一个字段，把B集合某一个值合并到Amap中
     * mapA:合并之后返回的map
     * listB:合并的集合
     * itemA:A集合和B集合比较的字段
     * itemB:B集合和A集合比较的字段
     * getVal:B集合中需要取的字段
     * @Author zhlu
     * @Description //TODO
     * @Date 2019/1/18 19:33
     */
    public static Map<String,Object> MapTranStringUtils(Map<String,Object> mapA,List<Map<String, Object>> listB,String itemA,String itemB,String getVal,String NewVal){
        String strA=null;
        if(FieldCheckUtil.isMapFieldNotNull(mapA,new String[]{itemA})){
            strA=mapA.get(itemA).toString();
            for(Map<String,Object> mapB:listB){
                String strB=mapB.get(itemB).toString();
                if(strA==strB||strA.equals(strB)){
                    mapA.put(NewVal,mapB.get(getVal));
                    mapA.put("ManId",mapB.get("ManId"));
                    mapA.put("MiManName",mapB.get("MiManName"));
                    mapA.put("BeId",mapB.get("BeId"));
                    mapA.put("BeName",mapB.get("BeName"));
                    break;
                }else{
                    mapA.put(NewVal,null);
                    mapA.put("ManId",null);
                    mapA.put("MiManName",null);
                    mapA.put("BeId",null);
                    mapA.put("BeName",null);
                }
            }
        }
        return mapA;
    }
    
    /**
     * 功能描述:
     * 合并list数组
     * list1 数组A
     * list2 数组B
     * str   根据那个字段合并
     * @Author zhlu
     * @Description //TODO
     * @Date 2019/4/17 11:49
     */
    public static List<Map<String,Object>> ListMergeUtils(List<Map<String,Object>>list1,List<Map<String,Object>>list2,String str){
        List<Map<String,Object>>result=new ArrayList<>();
        for(Map<String,Object> map1:list1){
            //集合1
            String oldCombineField=String.valueOf(map1.get(str));
            //集合2
            for(Map<String,Object> map2:list2){
                //
                String newCombineField=String.valueOf(map2.get(str));
                if(oldCombineField.equals(newCombineField)){
                    map1.putAll(map2);
                    break;
                }
            }
            result.add(map1);
        }
        return result;
    }



}
